﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LOGIC
{
    ///Logisk klass som hanterar privatgäster, ärver från logik klassen LogicGuest.
    public class LogicPrivateGuest : LogicGuest
    {
        private DB.Gäst privateguest;
        public LogicPrivateGuest()
        {
        }

        private LogicPrivateGuest(DB.Gäst guestObject)
        {
            this.privateguest = guestObject;
        }

        private LogicSession session;
        public LogicPrivateGuest(LogicSession session)
            : base(session)
        {
            this.session = session;
        }

        //Get-metoder
        #region
        public string förNamn
        {
            get { return privateguest.förNamn; }
        }

        public string efterNamn
        {
            get { return privateguest.efterNamn; }
        }
        public string gatuAdress
        {
            get { return privateguest.gatuAdress; }
        }
        public string postNr
        {
            get { return privateguest.postNr; }
        }
        public string telefonNr
        {
            get { return privateguest.telefonNr; }
        }
        public string ort
        {
            get { return privateguest.ort; }
        }
        public int kreditgräns
        {
            get { return (int)privateguest.kreditgräns; }
        }
        public int gästNr
        {
            get { return privateguest.gästNr; }
        }
        public decimal rabatt
        {
            get { return (decimal)privateguest.rabatt; }
        }
        #endregion


        /// <summary>
        /// Metod som skapar en ny privatgäst (används endast i bokningsfönstret)
        /// </summary>
        /// <param name="forename">Gästens förnamn</param>
        /// <param name="surname">Gästens efternamn</param>
        /// <param name="address">Gästens gatuadress</param>
        /// <param name="zip">Gästens postnummer</param>
        /// <param name="ort">Gästens ort</param>
        /// <param name="phonenumber">Gästens telefonnummer</param>
        /// <param name="creditLimit">Gästens kreditgräns</param>
        /// <param name="rabatt">Gästens rabatt</param>
        /// <returns></returns>
        public static LogicPrivateGuest NewPrivateGuest(string forename, string surname, string address, string zip, string ort, string phonenumber, int creditLimit, int rabatt)
        {
            return new LogicPrivateGuest(LogicSession.TheSession.Db.NewPrivateGuest(forename, surname, address, zip, ort, phonenumber, creditLimit, rabatt));
        }

        /// <summary>
        /// Metod för att ändra gästens uppgifter i bokningsfönstret (ändringar av t.ex. adress, telefonnummer m.m.)
        /// </summary>
        /// <param name="tempId">Gästens gästnummer</param>
        /// <param name="tempFName">Gästens förnamn</param>
        /// <param name="tempLName">Gästens efternamn</param>
        /// <param name="tempAddress">Gästens gatuadress</param>
        /// <param name="tempZip">Gästens postnummer</param>
        /// <param name="tempCity">Gästens ort</param>
        /// <param name="tempPhone">Gästens telefonnummer</param>
        public static void ChangedPrGuest(int tempId, string tempFName, string tempLName, string tempAddress, string tempZip, string tempCity, string tempPhone)
        {
            LogicSession.TheSession.Db.ChangedPrGuest(tempId, tempFName, tempLName, tempAddress, tempZip, tempCity, tempPhone);
        }

        /// <summary>
        /// Metod för att ändra privatgästens kreditgräns och rabatt i administrationen
        /// </summary>
        /// <param name="tempId">Gästens gästnummer</param>
        /// <param name="tempDiscount">Gästens rabatt</param>
        /// <param name="tempCredit">Gästens kreditgräns</param>
        public static void ChangedGuest(int tempId, int tempDiscount, int tempCredit)
        {
            LogicSession.TheSession.Db.ChangedGuest(tempId, tempDiscount, tempCredit);
        }

        /// <summary>
        /// Metod som hämtar in alla privatgäster till tabellen i administrationen
        /// </summary>
        /// <returns></returns>
        public IQueryable GetPrGuests()
        {
            return LogicSession.TheSession.Db.GetAllPGuests();
        }

        /// <summary>
        /// Metod som söker ut privatgäst på gästnummer
        /// </summary>
        /// <param name="tempId">Gästnummer</param>
        /// <returns></returns>
        public IQueryable GetGuestById(int tempId)
        {
            return LogicSession.TheSession.Db.GetGuestById(tempId);
        }

        /// <summary>
        /// Metod som söker ut privatgäster på förnamn
        /// </summary>
        /// <param name="tempFName">Förnamn</param>
        /// <returns></returns>
        public IQueryable GetGuestByFName(string tempFName)
        {
            return LogicSession.TheSession.Db.GetGuestByFName(tempFName);
        }

        /// <summary>
        /// Metod som söker ut privatgäster på efternamn
        /// </summary>
        /// <param name="tempLName">Efternamn</param>
        /// <returns></returns>
        public IQueryable GetGuestByLName(string tempLName)
        {
            return LogicSession.TheSession.Db.GetGuestByLName(tempLName);
        }

        /// <summary>
        /// Metod som söker ut privatgäster på både för- och efternamn
        /// </summary>
        /// <param name="tempLName">Efternamn</param>
        /// <param name="tempFName">Förnamn</param>
        /// <returns></returns>
        public IQueryable GetGuestByName(string tempLName, string tempFName)
        {
            return LogicSession.TheSession.Db.GetGuestByName(tempLName, tempFName);
        }
    }
}